# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:张广勤
@Web site: https://www.tunan.wang
@Github:www.github.com
 
@File:txt_keywords1_0.py
@Time:2024/9/5 14:50

@Motto:不积跬步无以至千里，不积小流无以成江海！
"""
import os
import re

# 用关键词提取段落，段落中包括关键词的任何一个则提取所在的段落到文件中
# 函数参数三个，要处理的文件夹，关键词列表，输出文件夹
def extract_paragraphs_with_keywords(folder_path, keywords, output_file_path):
    # 创建一个空列表来存储找到的段落
    paragraphs_with_keywords = []

    # 遍历文件夹下的所有文件
    for filename in os.listdir(folder_path):
        if filename.endswith(".txt"):  # 检查文件是否为文本文件
            # 拼接文件夹和文件名
            file_path = os.path.join(folder_path, filename)
            # 打开文件
            with open(file_path, 'r', encoding='utf-8') as file:
                # 读取文件内容
                content = file.read()

                # 假设每个段落由空行分隔
                paragraphs = content.split('\n\n')
                # 文件中先写上文件名，多个段落写一个文件名
                paragraphs_with_keywords.append('### ' + filename + '\n')
                # 遍历每个段落，检查是否包含关键字，只有包括其中一个就摘录段落
                for paragraph in paragraphs:
                    if any(keyword in paragraph for keyword in keywords):
                        # paragraphs_with_keywords.append('### '+filename+'\n')
                        paragraphs_with_keywords.append(paragraph + '\n\n')


    # 将找到的段落写入输出文件，列表写入文件
    with open(output_file_path, 'w', encoding='utf-8') as output_file:
        output_file.writelines(paragraphs_with_keywords)


#用下划线连接列表中的关键词
def join_with_underscore(items):
    # 使用join()方法拼接列表项，但首先需要将列表项转换为字符串
    # 如果列表为空，则直接返回空字符串
    if not items:
        return ""
    # 使用下划线作为分隔符来拼接列表项
    return "_".join(map(str, items))


#没有参数的函数，参数要求用户能过键盘输入
def input_keywords():
    #匹配项包括中文逗号、英文逗号、中文顿号、空格\s
    delimiter_pattern = re.compile(r'[，,、\s]+')

    # 获取用户输入的字符串，转为一个列表，如果用其他标点分割，则认为是一个字符串
    user_input = input("请输入不多于四个变量，可用中文逗号、英文逗号、顿号或空格分隔: ")

    # 使用正则表达式分割字符串,存入列表
    variables_list = delimiter_pattern.split(user_input)

    # 去除列表中的空字符串（如果用户在分隔符之间没有输入任何内容）
    variables_list = [var for var in variables_list if var]

    # 假设我们只关心前四个变量（如果用户输入了更多，我们可以选择忽略）
    # 注意：如果输入少于四个变量，列表将只包含实际输入的变量
    if len(variables_list) > 4:
        variables_list = variables_list[:4]  # 只取前四个

    return variables_list

# 示例用法
# txt文件所在的文件夹gongbao_quanguo/output_txt/
folder_path = 'gongbao_quanguo/output_txt/'

keywords = input_keywords()

# 输出文件夹，文件名拼接
output_path = 'gongbao_quanguo/paragrahp_txt_new/'
# output_file_path = output_path+'output_with_' + join_with_underscore(keywords) + '.txt'  # 输出文件的名称
output_file_path= f"{output_path}output_with_{join_with_underscore(keywords)}.txt"
# keywords = ['国内生产总值', '人口', '就业']

#程序和函数一样，都是：输入-处理-输出，输入可以是文件，键盘输入、爬虫爬取网上数据，文件可是以文件文件、word/excel
#处理，遍历、摘录、转换。输出：可以是文件，列表、变量，结果
extract_paragraphs_with_keywords(folder_path, keywords, output_file_path)